home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / ibus / setup / enginecombobox.py < prev    next >
Encoding:
Python Source  |  2009-11-05  |  4.0 KB  |  111 lines

  1. # vim:set et sts=4 sw=4:
  2. #
  3. # ibus - The Input Bus
  4. #
  5. # Copyright (c) 2007-2008 Huang Peng <shawn.p.huang@gmail.com>
  6. #
  7. # This library is free software; you can redistribute it and/or
  8. # modify it under the terms of the GNU Lesser General Public
  9. # License as published by the Free Software Foundation; either
  10. # version 2 of the License, or (at your option) any later version.
  11. #
  12. # This library is distributed in the hope that it will be useful,
  13. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. # GNU Lesser General Public License for more details.
  16. #
  17. # You should have received a copy of the GNU Lesser General Public
  18. # License along with this program; if not, write to the
  19. # Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  20. # Boston, MA  02111-1307  USA
  21.  
  22. import gtk
  23. import gobject
  24. import ibus
  25. import gettext
  26. from icon import load_icon
  27.  
  28. _ = lambda a : gettext.dgettext("ibus", a)
  29.  
  30. class EngineComboBox(gtk.ComboBox):
  31.     def __init__(self, engines):
  32.         super(EngineComboBox, self).__init__()
  33.  
  34.         self.__model = gtk.TreeStore(gobject.TYPE_PYOBJECT)
  35.  
  36.         iter1 = self.__model.append(None)
  37.         self.__model.set(iter1, 0, 0)
  38.         lang = {}
  39.         for e in engines:
  40.             l = ibus.get_language_name(e.language)
  41.             if l not in lang:
  42.                 lang[l] = []
  43.             lang[l].append(e)
  44.  
  45.         keys = lang.keys()
  46.         keys.sort()
  47.         if ibus.get_language_name("Other") in keys:
  48.             keys.remove( ibus.get_language_name("Other"))
  49.             keys += [ibus.get_language_name("Other")]
  50.         for l in keys:
  51.             iter1 = self.__model.append(None)
  52.             self.__model.set(iter1, 0, l)
  53.             for e in lang[l]:
  54.                 iter2 = self.__model.append(iter1)
  55.                 self.__model.set(iter2, 0, e)
  56.  
  57.         self.set_model(self.__model)
  58.  
  59.         renderer = gtk.CellRendererPixbuf()
  60.         renderer.set_property("xalign", 0)
  61.         self.pack_start(renderer, False)
  62.         self.set_cell_data_func(renderer, self.__icon_cell_data_cb)
  63.  
  64.         renderer = gtk.CellRendererText()
  65.         renderer.set_property("xalign", 0)
  66.         self.pack_start(renderer, True)
  67.         self.set_cell_data_func(renderer, self.__name_cell_data_cb)
  68.  
  69.         self.set_active(0)
  70.  
  71.     def __icon_cell_data_cb(self, celllayout, renderer, model, iter):
  72.         engine = self.__model.get_value(iter, 0)
  73.  
  74.         icon_size = gtk.icon_size_lookup(gtk.ICON_SIZE_LARGE_TOOLBAR)[0]
  75.         if isinstance(engine, str) or isinstance (engine, unicode):
  76.             renderer.set_property("visible", False)
  77.             renderer.set_property("sensitive", False)
  78.         elif isinstance(engine, int):
  79.             renderer.set_property("visible", False)
  80.             renderer.set_property("sensitive", False)
  81.         else:
  82.             renderer.set_property("visible", True)
  83.             renderer.set_property("sensitive", True)
  84.             pixbuf = load_icon(engine.icon, gtk.ICON_SIZE_LARGE_TOOLBAR)
  85.             if pixbuf == None:
  86.                 pixbuf = load_icon("engine-default", gtk.ICON_SIZE_LARGE_TOOLBAR)
  87.             if pixbuf == None:
  88.                 pixbuf = load_icon("gtk-missing-image", gtk.ICON_SIZE_LARGE_TOOLBAR)
  89.             renderer.set_property("pixbuf", pixbuf)
  90.  
  91.     def __name_cell_data_cb(self, celllayout, renderer, model, iter):
  92.         engine = self.__model.get_value(iter, 0)
  93.  
  94.         if isinstance (engine, str) or isinstance (engine, unicode):
  95.             renderer.set_property("sensitive", False)
  96.             renderer.set_property("text", engine)
  97.         elif isinstance(engine, int):
  98.             renderer.set_property("sensitive", True)
  99.             renderer.set_property("text", _("Select an input method"))
  100.         else:
  101.             renderer.set_property("sensitive", True)
  102.             renderer.set_property("text", engine.longname)
  103.  
  104.     def get_active_engine(self):
  105.         i = self.get_active()
  106.         iter = self.get_active_iter()
  107.         if i == 0 or i == -1:
  108.             return None
  109.         return self.get_model()[iter][0]
  110.  
  111.